package com.inspire.springboot.test;

import java.nio.ByteBuffer;

public class ByteBufferExample {
    public static void main(String[] args) {
        // 创建一个 ByteBuffer，分配 10 字节的容量
        ByteBuffer buffer = ByteBuffer.allocate(20);

        // 向 buffer 中放入原始数据
        buffer.put("HelloWorld".getBytes());

        // 输出原始的 ByteBuffer 内容
        buffer.flip();  // 切换为读取模式
        System.out.println("Original Buffer: " + new String(buffer.array(), 0, buffer.limit()));  // 输出: HelloWorld

        // 假设我们要删除 position 为 5 之后的所有字符
        int positionToKeep = 5;
        buffer.position(positionToKeep);  // 设置 position 为 5

        // 现在，我们将 compact()，它会将 position 之前的数据移到 buffer 的起始位置
        // 同时 position 将变为新数据的末尾，limit 设置为容量
        buffer.compact();  // 保留前 5 个字节，并清除后续字节

        System.out.println("buffer.position() = " + buffer.position());
        // 打印 compact 后的 ByteBuffer 内容
        System.out.println("After compact: " + new String(buffer.array(), 0, buffer.position()));  // 输出: Hello

        // 保存原始 position
        int originalPosition = buffer.position();

        // 向 buffer 中追加新数据
        String newData = "NewData";
        byte[] newBytes = newData.getBytes();

        // 如果 buffer 中有足够的空间来追加新数据
        if (buffer.remaining() >= newBytes.length) {
            buffer.put(newBytes);  // 追加新数据
        } else {
            System.out.println("Not enough space to append data.");
        }

        // 打印最终的 ByteBuffer 内容
        buffer.flip();  // 切换为读取模式
        System.out.println("Final Buffer: " + new String(buffer.array(), 0, buffer.limit()));  // 输出: HelloNewData

        // 确保 position 不变
        buffer.position(originalPosition);
        System.out.println("Position after append: " + buffer.position());  // 输出: 5
    }
}
